package com.ybt.service;

import com.ruleengine.context.IWorkflowConext;
import com.ruleengine.endpoint.data.IEndpointData;
import com.ybt.service.callback.IServiceCallback;
import com.ybt.service.exception.ServiceException;

/**
 * 银保通服务接口.
 * @author AB033862
 * Jul 30, 2012
 */
public interface IService {
    /**
     * 返回服务名称
     * @return
     */
    public String getName();
    /**
     * 设置服务名称
     * @param name 服务名称
     */
    public void setName(String name);
    /**
     * 服务同步调用入口方法.
     * <br/>如果对应的工作流invoker节点的属性synchronize=true（默认值）,
     * <br/>那么工作流引擎就会调用此方法，作为服务的入口.
     * @param context 工作流context
     * @param data 工作流数据
     * @throws ServiceException
     */
    public void service(IWorkflowConext context, IEndpointData data)throws ServiceException;
    
    /**
     * 服务异步调用入口方法.
     * <br/>如果对应的工作流invoker节点的属性synchronize=false（默认值）,
     * <br/>那么工作流引擎就会调用此方法，作为服务的入口.
     * <br/>异步服务结束后，必须调用callback对象的对应方法，重新进入工作流引擎.
     * @param context 工作流context
     * @param data 工作流数据
     * @param callback 回调对象
     *                 回调对象是异步服务重新进入工作流引擎的工具
     * @throws ServiceException
     */
    public void serviceNonBlocking(IWorkflowConext context, IEndpointData data, IServiceCallback callback)throws ServiceException;
}
